const cloudHelper = require('@/utils/helper/cloud_helper.js');

// 验证图片URL是否有效
function isValidImageUrl(url) {
    if (!url) return false;
    // 检查是否是有效的URL格式
    if (url.startsWith('data:image/') || url.startsWith('/')) {
        return true;
    }
    // 检查是否是云存储路径
    if (url.startsWith('cloud://')) {
        return true;
    }
    // H5环境下避免使用外部HTTP图片，防止跨域问题
    // #ifdef H5
    if (url.startsWith('http://') || url.startsWith('https://')) {
        console.warn('H5环境下使用外部图片可能导致跨域问题:', url);
        return false; // 在H5环境下不使用外部图片
    }
    // #endif
    
    // 非H5环境可以使用HTTP图片
    // #ifndef H5
    if (url.startsWith('http://') || url.startsWith('https://')) {
        return true;
    }
    // #endif
    
    return false;
}

/**
 * 处理图片URL，确保H5兼容性
 */
function processImageUrl(url) {
    if (!url) return '/static/images/share.jpg';
    
    // 如果是有效的本地图片，直接使用
    if (url.startsWith('/static/') || url.startsWith('data:image/')) {
        return url;
    }
    
    // 如果是外部图片，在H5环境下替换为本地图片
    // #ifdef H5
    if (url.startsWith('http://') || url.startsWith('https://')) {
        console.warn('H5环境下使用本地图片替代外部图片:', url);
        return '/static/images/share.jpg';
    }
    // #endif
    
    // 其他情况也使用默认图片
    return isValidImageUrl(url) ? url : '/static/images/share.jpg';
}

/**
 * 生成简化测试海报配置
 */
async function generateSimplePoster({
    cover,
    title,
    desc,
    qr,
    user = '',
    avatar = '',
    bg = 'linear-gradient(180deg,#ff971b 0%, #ff5000 100%)'
}) {
    console.log('生成简化海报配置参数:', { cover, title, desc, qr, user, avatar, bg });
    
    // 处理图片URL，确保H5兼容性
    cover = processImageUrl(cover);
    
    // 生成简单的海报配置
    return {
        css: {
            width: '750rpx',
            paddingBottom: '40rpx',
            background: bg || '#ffffff'
        },
        views: [
            // 封面图片
            {
                src: cover,
                type: 'image',
                css: {
                    width: '670rpx',
                    height: '400rpx',
                    marginLeft: '40rpx',
                    marginTop: '40rpx',
                    objectFit: 'cover',
                    borderRadius: '16rpx'
                }
            },
            // 标题
            title ? {
                text: title,
                type: 'text',
                css: {
                    marginLeft: '40rpx',
                    marginTop: '30rpx',
                    width: '670rpx',
                    fontSize: '36rpx',
                    fontWeight: 'bold',
                    color: '#333333',
                    lineHeight: '1.4em'
                }
            } : null,
            // 描述
            desc ? {
                text: desc,
                type: 'text',
                css: {
                    marginLeft: '40rpx',
                    marginTop: '20rpx',
                    width: '670rpx',
                    fontSize: '28rpx',
                    color: '#666666',
                    lineHeight: '1.4em',
                    lineClamp: 3
                }
            } : null
        ].filter(Boolean) // 过滤掉 null 值
    };
}

/**
 * 生成基础海报配置
 * @param {Object} params 海报参数
 * @param {string} params.cover 封面图片
 * @param {string} params.title 标题
 * @param {string} params.desc 描述
 * @param {string} params.qr 二维码内容
 * @param {string} params.user 用户名
 * @param {string} params.avatar 头像
 * @param {string} params.bg 背景色或渐变
 * @returns {Object} lime-painter 配置对象
 */
async function generateBasicPoster({
    cover,
    title,
    desc,
    qr,
    user = '',
    avatar = '',
    bg = 'linear-gradient(180deg,#ff971b 0%, #ff5000 100%)'
}) {
    console.log('生成基础海报配置参数:', { cover, title, desc, qr, user, avatar, bg });
    
    // 先使用简化版本进行测试
    // return await generateSimplePoster({ cover, title, desc, qr, user, avatar, bg });
    
    // 处理云存储图片
    if (cover && cover.startsWith('cloud')) {
        cover = await cloudHelper.getTempFileURLOne(cover);
    }
    if (avatar && avatar.startsWith('cloud')) {
        avatar = await cloudHelper.getTempFileURLOne(avatar);
    }
    
    // 处理图片URL，确保H5兼容性
    cover = processImageUrl(cover);
    avatar = avatar ? processImageUrl(avatar) : '';

    const posterConfig = {
        css: {
            width: '750rpx',
            minHeight: '600rpx',
            paddingBottom: '40rpx',
            background: bg || '#ffffff'
        },
        views: []
    };

    // 添加头像
    if (avatar) {
        posterConfig.views.push({
            src: avatar,
            type: 'image',
            css: {
                background: '#ffffff',
                objectFit: 'cover',
                marginLeft: '40rpx',
                marginTop: '40rpx',
                width: '84rpx',
                border: '2rpx solid #ffffff',
                boxSizing: 'border-box',
                height: '84rpx',
                borderRadius: '50%'
            }
        });
    }

    // 添加用户信息
    if (user) {
        posterConfig.views.push({
            type: 'view',
            css: {
                marginTop: avatar ? '40rpx' : '40rpx',
                paddingLeft: '20rpx',
                display: 'inline-block'
            },
            views: [
                {
                    text: user,
                    type: 'text',
                    css: {
                        display: 'block',
                        paddingBottom: '10rpx',
                        color: '#ffffff',
                        fontSize: '32rpx',
                        fontWeight: 'bold'
                    }
                },
                {
                    text: '为您推荐了一个好物',
                    type: 'text',
                    css: {
                        color: 'rgba(255,255,255,.7)',
                        fontSize: '24rpx'
                    }
                }
            ]
        });
    }

    // 内容卡片
    const cardViews = [];

    // 封面图片
    if (cover) {
        cardViews.push({
            src: cover,
            type: 'image',
            css: {
                objectFit: 'cover',
                objectPosition: '50% 50%',
                width: '606rpx',
                height: '400rpx',
                borderRadius: '12rpx'
            }
        });
    }

    // 标题和描述区域
    if (title || desc) {
        const contentView = {
            css: {
                marginTop: '30rpx',
                display: 'flex',
                flexDirection: 'row',
                justifyContent: 'space-between',
                alignItems: 'flex-start'
            },
            views: [],
            type: 'view'
        };

        // 文字内容
        const textContent = {
            css: {
                flex: 1,
                paddingRight: qr ? '20rpx' : '0rpx',
                boxSizing: 'border-box'
            },
            views: [],
            type: 'view'
        };

        if (title) {
            textContent.views.push({
                text: title,
                type: 'text',
                css: {
                    display: 'block',
                    lineClamp: 2,
                    color: '#333333',
                    lineHeight: '1.5em',
                    fontSize: '36rpx',
                    fontWeight: 'bold',
                    marginBottom: desc ? '10rpx' : '0rpx'
                }
            });
        }

        if (desc) {
            textContent.views.push({
                text: desc,
                type: 'text',
                css: {
                    display: 'block',
                    lineClamp: 3,
                    color: '#666666',
                    lineHeight: '1.4em',
                    fontSize: '28rpx'
                }
            });
        }

        contentView.views.push(textContent);

        // 二维码
        if (qr) {
            contentView.views.push({
                text: qr,
                type: 'qrcode',
                css: {
                    width: '128rpx',
                    height: '128rpx',
                    background: '#ffffff'
                }
            });
        }

        cardViews.push(contentView);
    }

    // 添加内容卡片容器
    if (cardViews.length > 0) {
        posterConfig.views.push({
            css: {
                marginLeft: '40rpx',
                marginTop: '30rpx',
                padding: '32rpx',
                boxSizing: 'border-box',
                background: '#ffffff',
                borderRadius: '16rpx',
                width: '670rpx',
                boxShadow: '0 20rpx 58rpx rgba(0,0,0,.15)'
            },
            views: cardViews,
            type: 'view'
        });
    }

    console.log('生成的海报配置:', posterConfig);
    return posterConfig;
}

/**
 * 生成新闻海报配置
 */
async function generateNewsPoster({
    cover,
    title,
    desc,
    qr,
    user = '系统推荐',
    avatar = '',
    bg = 'linear-gradient(180deg,#4CAF50 0%, #2E7D32 100%)'
}) {
    return await generateBasicPoster({
        cover,
        title,
        desc,
        qr,
        user,
        avatar,
        bg
    });
}

/**
 * 生成课程海报配置
 */
async function generateCoursePoster({
    cover,
    title,
    desc,
    qr,
    teacher = '专业讲师',
    avatar = '',
    bg = 'linear-gradient(180deg,#2196F3 0%, #1565C0 100%)'
}) {
    return await generateBasicPoster({
        cover,
        title,
        desc,
        qr,
        user: teacher,
        avatar,
        bg
    });
}

module.exports = {
    generateBasicPoster,
    generateSimplePoster,
    generateNewsPoster,
    generateCoursePoster,
    isValidImageUrl,
    processImageUrl
};
